package com.caine.multithread.demo;

/**
 * 小 结：
 * 1、出现类锁的情况：
 *
 * 以 类.class 为锁
 * 以 静态变量为锁
 * 修饰静态方法
 * 2、出现对象锁的情况：
 *
 * 以实例成员对象为锁（特殊：this 指当前对象）
 * 以局部变量（甚至是方法传进来的参数）为锁、
 * 修饰成员方法
 * 3、当synchronized修饰方法时，synchronized是不参与 方法签名的比较；
 */
public class SimpleClass {

    // 对象锁
    private Object obj = new Object();
    // 这里是因为字面常量导致锁的是同一个实例,导致的类锁
    private String obj1 = "12324";
    // 类锁
    // private static Object lock = new Object();
    public void say(int i){
        System.out.println("enter "+i);
        // 类锁
//        synchronized (SimpleClass.class){
//        synchronized (lock){
        // 对象锁
        synchronized (obj1){
            System.out.println("exec "+ i);
            try {
                Thread.sleep(10000L);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        System.out.println("exit "+i);
    }
}
